#include <iostream>

#define N 99999

using  namespace std;
int pre[N];
//初始化节点
void init(){
    for (int i = 0; i < N; ++i) {
        pre[i]=i;
    }
}
//递归方式路径压缩和找根
int find_dg(int x){
//    if (x!=pre[x])
//        pre[x]=find_dg(pre[x]);
//    return x;
    return x!=pre[x]?pre[x]=find_dg(pre[x]): x;
}

//根节点查找and路径压缩
int find(int x)
{
    int r=x;
    //找到他的前导结点,直到根节点
    while(pre[r]!=r) {
        r=pre[r];
    }
    int i=x,j;
    //路径压缩
    while(i!=r)
    {
        //记录x的前导结点
        j=pre[i];
        //将i的前导结点设置为r根节点
        pre[i]=r;
        i=j;
    }
    return r;
}
//连接函数
int join(int x,int y){
    //x的根节点为a
    int a=find(x);
    //y的根节点为b
    int b=find(y);
    //如果a,b不是相同的根节点，则说明ab不是连通的
    if(a!=b)
    {
        //我们将ab相连 将a的前导结点设置为b
        pre[a]=b;
    }
}
int main(){
    int connt;
    init();
    cin>>connt;
    for (int i = 0; i < connt; ++i) {

    }
}